package com.rr.tools;

import com.rr.entity.Module;
import com.rr.entity.Role;
import com.rr.entity.Users;
import com.rr.service.ModuleService;
import com.rr.service.RoleMenuService;
import com.rr.service.RoleService;
import com.rr.service.UsersService;
import jakarta.annotation.Resource;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class SystemTools {
    @Autowired
    private RoleService roleService;

    @Autowired
    private ModuleService moduleService;

    @Autowired
    private UsersService usersService;

    /**
     * 角色查询工具 - 根据条件筛选角色
     *
     * @param role 角色查询条件对象（可选）
     * @return 匹配的角色列表（最多返回100条记录）
     */
    @Tool(description = "根据条件查询角色信息，支持按角色名/描述等字段过滤")
    public List<Role> queryRole(
            @ToolParam(required = false, description = "角色查询条件对象，可包含角色名、描述等字段") Role role) {
        return roleService.query(role);
    }

    /**
     * 模块查询工具 - 多条件联合查询
     *
     * @return 匹配的模块列表（最多返回100条记录）
     */
    @Tool(description = "多条件联合查询模块信息，支持按名称/ID/级别/URL等字段组合过滤")
    public List<Module> queryModule(
            @ToolParam(required = false, description = "模块名称（精确匹配）") String moduleName,
            @ToolParam(required = false, description = "模块ID（精确匹配）") Integer moduleId,
            @ToolParam(required = false, description = "模块级别（如：1-一级菜单, 2-二级菜单）") String moduleLevel,
            @ToolParam(required = false, description = "模块访问路径（URL）") String moduleUrl,
            @ToolParam(required = false, description = "模块描述信息") String moduleNotes,
            @ToolParam(required = false, description = "模块图标（CSS类名）") String moduleIcon
    ){
        Module module = new Module();
        module.setModuleName(moduleName);
        module.setModuleId(moduleId);
        module.setModuleLevel(moduleLevel);
        module.setModuleUrl(moduleUrl);
        module.setModuleNotes(moduleNotes);
        module.setModuleIcon(moduleIcon);
        return moduleService.queryAllModule(module);
    }

    /**
     * 角色权限查询 - 获取角色拥有的模块权限
     *
     * @param roleId 角色ID（必填）
     * @return 该角色有权访问的模块列表
     */
    @Tool(description = "根据角色ID查询其拥有的模块权限列表")
    public List<Module> queryModuleByRoleId(
            @ToolParam(required = true, description = "角色ID（整数类型）") Integer roleId){
        return moduleService.queryModelByRoleId(roleId);
    }

    /**
     * 用户创建工具 - 创建新用户账号
     *
     * @return 创建成功返回true，失败返回false
     */
    @Tool(description = "创建新用户账号，初始密码为123456")
    public boolean insertUser(
            @ToolParam(required = true, description = "登录用户名（唯一标识）") String username,
            @ToolParam(required = false, description = "用户真实姓名") String realname,
            @ToolParam(required = false, description = "性别（男/女/未知）") String sex,
            @ToolParam(required = false, description = "手机号码（11位数字）") String mobile,
            @ToolParam(required = false, description = "电子邮箱地址") String email,
            @ToolParam(required = false, description = "所属部门ID") Integer deptId,
            @ToolParam(required = true, description = "关联角色ID") Integer roleId){
        Users users = new Users();
        users.setUsername(username);
        users.setUserPassword("123456"); // 初始密码
        users.setUserRealname(realname);
        users.setUserSex(sex);
        users.setUserMobile(mobile);
        users.setUserEmail(email);
        users.setDeptId(deptId);
        users.setRoleId(roleId); // 使用传入的roleId
        Users insert1 = usersService.insert(users);
        return insert1 != null;
    }

    // ==== 新增关键工具 ====

    /**
     * 通用查询工具 - 根据命令自动路由
     *
     * @param command 用户原始命令文本
     * @return 查询结果列表（自动路由到对应实体）
     */
    @Tool(description = "通用查询路由工具：根据命令关键词自动选择用户/角色/模块查询")
    public String  smartQuery(
            @ToolParam(required = true, description = "用户原始命令文本（如：查询所有用户信息）") String command) {

        if (command.contains("用户")) {
            return "/back/user";
        } else if (command.contains("角色")) {
            return "/back/role";
        } else if (command.contains("模块")) {
            return "/back/module";
        }

        throw new IllegalArgumentException("无法识别的查询命令: " + command);
    }
}